"""
视图函数

"""

from flask import current_app, session, request, jsonify
from flask import render_template

from info import constants
from info.models import User, Category, News
from info.modules.index import index_blu
from info.utils.response_code import RET


@index_blu.route("/")
def index():

    # 判断用户是否登陆 因为HTTP协议是无状态的，为了保持有状态，就通过cookie和session来判断
    # 根据本地的session来判断 获取用户ID
    # user_id = session["user_id"]
    user_id = session.get("user_id")
    # 先声明user为NONE
    user = None
    if user_id:
        try:
            user = User.query.get(user_id)
        except Exception as e:
            current_app.logger.error(e)

    # # 完成导航栏部分的分类信息
    # # 导航栏的分类信息是从数据库中查询分类表中的数据,然后用模板渲染出来
    category_list = None
    try:
        category_list = Category.query.all()
    except Exception as e:
        current_app.logger.debug(e)

    # 完成右侧的热搜信息
    # 按照点击排行获取前10条信息
    hot_news = None
    try:
        hot_news = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
    except Exception as e:
        current_app.logger.error(e)

    click_news_list = []
    for news in hot_news:
        click_news_list.append(news.to_basic_dict())

    # 测试session
    # session["age"] = 1111
    # 存储在redis数据库的格式： "session:4e696341-3a6b-4a9f-9c95-d9660f54915e"
    # 通过get key session:4e696341-3a6b-4a9f-9c95-d9660f54915e 得到的结果是\x80\x03}q\x00X\x03\x00\x00\x00ageq\x01MW\x04s.
    # 造成这样的原因是，session的存储本身是加密的。
    current_app.logger.debug('debug')
    # return "这是一个首页测试session2"
    # 把用户的信息返回过去
    return render_template("news/index.html", user=user, click_news_list=click_news_list,category_list=category_list)


# 加载/favicon.ico并返回静态文件
@index_blu.route("/favicon.ico")
def get_favicon():
    # 通过调用send_static_file方法返回
    return current_app.send_static_file("news/favicon.ico")


@index_blu.route('/newslist')
def get_news_list():
    """
    获取指定分类的新闻列表
    1. 获取参数
    2. 校验参数
    3. 查询数据
    4. 返回数据
    :return:
    """

    # 1. 获取参数
    args_dict = request.args
    page = args_dict.get("p", '1')
    per_page = args_dict.get("per_page", constants.HOME_PAGE_MAX_NEWS)
    category_id = args_dict.get("cid", '1')

    # 2. 校验参数
    try:
        page = int(page)
        per_page = int(per_page)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")

    # 3. 查询数据并分页
    filters = []
    # 如果分类id不为1，那么添加分类id的过滤
    if category_id != "1":
        filters.append(News.category_id == category_id)
    try:
        paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, per_page, False)
        # 获取查询出来的数据
        items = paginate.items
        # 获取到总页数
        total_page = paginate.pages
        current_page = paginate.page
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")

    news_li = []
    for news in items:
        news_li.append(news.to_basic_dict())

    # 4. 返回数据
    return jsonify(errno=RET.OK, errmsg="OK", totalPage=total_page, currentPage=current_page, newsList=news_li, cid=category_id)
